home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 2 / The 640 Meg Shareware Studio CD-ROM Volume II (Data Express)(1993).ISO / rbbs / rbbs_mpl.zip / RCHAT300.BAS < prev    next >
BASIC Source File  |  1992-04-15  |  22KB  |  615 lines

  1. '
  2. ' RChat300  --  Or, RBBS-Chat, release 3.00.  A character by character
  3. '               internode chat program..
  4. '
  5. '  Not the worlds prettiest, or cleanest code.. but I'm under no illusions..
  6. '
  7. '  Copyright 1989-1990 By John Morris  All Rights Reserved
  8. '  modifications for rbbs17.4 by Pete Eibl
  9. '
  10. '  I'm not a big fan of global variables, but here goes..
  11. '
  12. '  $INCLUDE: 'RBBS-VAR.MOD'   'RBBS-VAR.BAS minus the DEF FN...
  13. '  $DYNAMIC
  14.    DEFINT A - Z
  15.    COMMON Shared /Chat/ DoTrueChat, HasPaged, UpperNode, LowerNode, SaveToDisk
  16.    COMMON Shared /Chat/ NodesToSquelch$
  17.    COMMON SHARED /ChatField/ ChatActivity$, PagingNode$, PrivateFor$
  18.    COMMON SHARED /ChatField/ ChatInput$, ChatName$, InTrueChat$
  19.    COMMON SHARED /ChatField/ TrueChatIndex$, SavingToDisk$, BBSActivity$
  20. '
  21. 59800 ' $SUBTITLE: 'LogNewForChat - Save user info for chat'
  22. ' $PAGE
  23. '
  24. '  NAME    -- LogNewForChat
  25. '
  26. '  INPUTS  -- Zmaxnodes -- needed for creation of RBBSCHAT.DEF
  27. '
  28. '  OUTPUTS -- Updates the node record in RBBSCHAT.DEF with this users
  29. '             name and chat activity (always "I") when the user logs on.
  30. '
  31. '  PURPOSE -- See OUTPUTS. Also, if no RBBSCHAT.DEF is not found, one will be
  32. '             created.
  33. '
  34.       SUB LogNewForChat(ZMaxNodes) STATIC
  35.       CALL FindItX (ZChatFileName$, 9)
  36.       REM ** If "RBBSCHAT.DEF" does not exist, then create it **
  37.  
  38.       IF NOT ZOK THEN
  39.          CALL OpenWrk9 (ZChatFileName$)
  40.          FIELD 9, 128 AS TempNode$
  41.          LSET TempNode$ = SPACE$(128)
  42.          FOR Index = 1 TO ZMaxNodes
  43.             CALL LockIt9 (Index, ZFalse)
  44.          NEXT
  45.       END IF
  46.  
  47.       ChatIndex = ZNodeRecIndex - 1
  48.       CLOSE 9
  49.       CALL OpenWrk9 (ZChatFileName$)
  50.       CALL Field9
  51.       CALL LockIt9 (ChatIndex, ZTrue)
  52.       LSET ChatActivity$ = "I"    ' I means inactive
  53.       LSET PagingNode$ = MKI$(0)
  54.       LSET ChatName$ = SPACE$(31)
  55.  
  56.       IF ZActiveUserName$ = ZSysopPswd1$ + " " + ZSysopPswd2$ THEN
  57.          LSET ChatName$ = "SYSOP"
  58.        ELSE
  59.          LSET ChatName$ = ZActiveUserName$
  60.       END IF
  61.  
  62.       LSET ChatInput$ = SPACE$(72)
  63.       LSET InTrueChat$ = "I"
  64.       CALL LockIt9 (ChatIndex, ZFalse)
  65.       CLOSE 9
  66.       END SUB
  67.  
  68. 59810 ' $SUBTITLE: 'CBCHECK - Check for a page attempt'
  69. ' $PAGE
  70. '
  71. '  NAME    -- CBCHECK
  72. '
  73. '  INPUTS  -- NONE
  74. '
  75. '  OUTPUTS -- ChatActivity$   Changed to reflect whether or not they
  76. '                             are going to chat
  77. '             WillChat        If WillChat is TRUE, then the user will
  78. '                             automatically be thrust unawares into
  79. '                             chat mode.. They said yes... didn't they?
  80. '
  81. '  PURPOSE -- Check to see if we have been paged from another node
  82. '
  83.       SUB CBCheck(WillChat) STATIC
  84.       WillChat = ZFalse
  85.       ZOutTxt$ = ""
  86.       IsTrueChat = ZFalse
  87.       CALL FindItX (ZChatFileName$, 9)
  88.  
  89.       IF NOT ZOK THEN
  90.          EXIT SUB
  91.       END IF
  92.  
  93.       ChatIndex = ZNodeRecIndex - 1
  94.       CLOSE 9
  95.       CALL OpenWrk9 (ZChatFileName$)
  96.       CALL Field9
  97.       CALL LockIt9 (ChatIndex, ZTrue)
  98.  
  99.       IF ChatActivity$ = "R" THEN   'R means request for chat
  100.          PagerIndex = CVI(PagingNode$)
  101.          CALL RingCaller
  102.          CALL LockIt9 (PagerIndex, ZTrue)
  103.          IsTrueChat = (InTrueChat$ = "A")
  104.          ZOutTxt$ = ChatName$
  105.          CALL TrimTrail (ZOutTxt$, " ")
  106.          CALL NameCaps(ZOutTxt$)
  107.          CALL UpdtCalr("Paged for Chat by " + ZOutTxt$ + " on node" + STR$(PagerIndex), 1)
  108.          CALL QuickTPut( ZOutTxt$ + " is requesting that you join in a chat!", 1)
  109.          ZOutTxt$ = "Do you plan to join the chat (Y/[N])"
  110.          ZSubParm = 1
  111.          CALL TGet
  112.                    IF ZSubParm = -1 THEN
  113.                      CLOSE 9
  114.                       EXIT SUB
  115.                    END IF
  116.          CALL LockIt9 (ChatIndex, ZTrue)
  117.  
  118.                 IF ZNo OR (ZWasQ = 0) THEN
  119.                      LSET ChatActivity$ = "N"   'No, I don't think I'll chat
  120.                   ELSE
  121.                     LSET ChatActivity$ = "Y"   'Yeah, I might just join a chat
  122.                    WillChat = ZTrue
  123.                  END IF
  124.  
  125.  
  126.          CALL LockIt9 (ChatIndex, ZFalse)
  127.       END IF
  128.       CLOSE 9
  129.   END SUB
  130.  
  131. 59820 ' $SUBTITLE: 'PageEm - attempt to page another user to chat'
  132. ' $PAGE
  133. '
  134. '  NAME    -- PageEm
  135. '
  136. '  INPUTS  -- ShowOnly         Show whos is on the other nodes only
  137. '             Zmaxnodes    Number of nodes in this system
  138. '
  139. '  OUTPUTS -- HasPaged        -1 exit chat mode
  140. '                              0 don't check for reply to page
  141. '                              1 - Zmaxnodes check for page reply
  142. '
  143. '  PURPOSE -- Page another user on the system and set up for a reply
  144. '             from the other user
  145. '
  146.       SUB PageEm(CurrentNodeIndex, ZMaxNodes, ShowOnly) STATIC
  147.  
  148.       REM ** Page 'Em only needs access to the COMMON variable HasPaged **
  149.       SHARED HasPaged
  150.  
  151.       CALL WhosOn (ZMaxNodes)
  152.       CALL SkipLine(1)
  153.  
  154.         IF ShowOnly THEN
  155.           EXIT SUB
  156.          END IF
  157.  
  158.       ZOutTxt$ = "Which node do you wish to page (1 -" + STR$(ZMaxNodes) + ")" + PRESS.ENTER$
  159.       ZSubParm = 1
  160.       CALL TGet
  161.  
  162.           IF ZWasQ = 0 OR ZSubParm = -1 THEN
  163.             HasPaged = -1
  164.              EXIT SUB
  165.             END IF
  166.  
  167.       CALL CheckInt(ZUserIn$(1))
  168.       CALL Field9
  169.  
  170.       IF ZTestedIntValue > 0 AND ZTestedIntValue <= ZMaxnodes AND _
  171.          ZTestedIntValue <> CurrentNodeIndex THEN
  172.          CALL LockIt9 (ZTestedIntValue, ZTrue)
  173.  
  174.              IF ChatActivity$ = "A" THEN        'if other node already
  175.               HasPaged = 0
  176.                END IF
  177.  
  178.          CALL QuickTPut1("Hang on,  I'll let them know you want to chat")
  179.          CALL QuickTPut1("If you don't get an answer within a couple minutes,")
  180.          CALL QuickTPut1("then you probably won't get an answer")
  181.          LSET ChatActivity$ = "R"                        'R means Request
  182.          LSET PagingNode$ = MKI$(CurrentNodeIndex)
  183.          HasPaged = ZTestedIntValue
  184.          CALL LockIt9 (ZTestedIntValue, ZFalse)
  185.         ELSE
  186.          HasPaged = -1
  187.       END IF
  188.  
  189.    END SUB
  190.  
  191. 59830 ' $SUBTITLE: 'CBTrueChat - The letter by letter chat'
  192. ' $PAGE
  193. '
  194. '  NAME    -- CBTrueChat
  195. '
  196. '  INPUTS  -- Zmaxnodes
  197. '
  198. '  INTERNAL - NodesToSquelch$      STRING OF NODES NOT TO RECEIVE TEXT FROM
  199. '             HasPaged             NODE (IF ANY) THAT THIS USER PAGED
  200. '             CurrentNodeIndex     NODE RECORD IN "RBBSCHAT.DEF"
  201. '             ChatActivity$        CURRENT STATUS OF EACH NODE
  202. '             PagingNode$          NODE WHICH HAS PAGED THIS ONE
  203. '             ChatInput$           CURRENT TEXT INPUT BY USER FOR CHATTING
  204. '             ChatName$            NAME OF USER ON EACH NODE (NOT CURRENTLY USED)
  205. '             SquelchIt            BOOLEAN - MEANS NODE IS IGNORED
  206. '             ZUserIn$()           USED TO SAVE CURRENT STATUS OF EACH NODE
  207. '                                  THIS INFO IS LATER COMPARED, AND IF THAT
  208. '                                  STATUS IS CHANGED, THEN THE USER IS NOTIFIED
  209. '                                  OF THE CHANGE
  210. '             DoTrueChat           Means we are in a true chat mode, we'll
  211. '                                  only check one node for input
  212. '
  213. '
  214. '  OUTPUTS -- NONE
  215. '
  216. '  PURPOSE -- To allow users to chat between nodes in several different
  217. '             ways.
  218. '
  219.       SUB CBTrueChat(Zmaxnodes) STATIC
  220.  
  221.       SHARED DoTrueChat, HasPaged, UpperNode, LowerNode, SaveToDisk
  222.       SHARED NodesToSquelch$
  223.  
  224.       CALL SaveUserActivity("C", ZNodeRecIndex, ZFalse)
  225.  
  226.       ZCol = 1
  227.       SendRemote = ZRemoteEcho
  228.       SaveToDisk = ZFalse
  229.       DoTrueChat = ZFalse
  230.       NodesToSquelch$ = ""
  231.       HasPaged = 0
  232.       ChatSubParm = 0
  233.       CALL FindItX (ZChatFileName$, 9)
  234.       IF ZOK THEN
  235.          CurrentNodeIndex = ZNodeRecIndex - 1
  236.          CLOSE 9
  237.          CALL OpenWrk9 (ZChatFileName$)
  238.          CALL Field9
  239.          CALL UpdtCalr("Entered CBTrueCh@ sim at " + TIME$, 1)
  240.          CALL QuickTPut1("Type Ctrl-Q or ESCape for a list of commands")
  241.  
  242.          REDIM TrueChatIndexHold(Zmaxnodes)
  243.  
  244.          CALL LockIt9 (CurrentNodeIndex, ZTrue)
  245.             LowerNode = 1
  246.             UpperNode = Zmaxnodes
  247.          LSET ChatActivity$ = "A"
  248.          LSET TrueChatIndex$ = MKI$(1)
  249.          CALL LockIt9 (CurrentNodeIndex, ZFalse)
  250.  
  251.          REM ** Load in current node status for later comparison **
  252.          FOR LineIndex = 1 TO Zmaxnodes
  253.             CALL LockIt9 (LineIndex, ZTrue)
  254.             ZUserIn$(LineIndex) = ChatActivity$
  255.             REM ** save current index so we don't get a bunch of trash if **
  256.             REM ** a chat is already in progress.                         **
  257.             IF ChatActivity$ = "A" THEN
  258.                TrueChatIndexHold(LineIndex) = CVI(TrueChatIndex$)
  259.              ELSE
  260.                TrueChatIndexHold(LineIndex) = 1
  261.             END IF
  262.          NEXT
  263.  
  264.          REM ** Set Autologoff time before we start looping **
  265. '         ZAutoLogoff! = TIMER + ZWaitBeforeDisconnect
  266.  
  267.          REM ** We are currently getting name from MESSAGES file.. set that up..
  268.          WasA1$ = ZActiveMessageFile$
  269.          ZActiveMessageFile$ = ZOrigMsgFile$
  270.          CALL OpenMsg
  271.          FIELD 1, 128 AS ZMsgRec$
  272.  
  273.          DO 'the wild chat thingie..
  274.  
  275. REM **************************************************************************
  276. REM ******Check for answer to page, or text from other users in chat  ********
  277. REM ******If the other guy has 'page availability' turned off, then   ********
  278. REM ******we simply won't tell this guy.. he won't know the difference********
  279. REM **************************************************************************
  280.             FOR LineIndex = LowerNode TO UpperNode
  281.  
  282.                SquelchIt = ZFalse
  283.                IF LineIndex <> CurrentNodeIndex THEN
  284.  
  285.                   CALL LockIt9 (LineIndex, ZTrue)
  286.                   Index$ = MID$(STR$(LineIndex), 2, 1)
  287.  
  288.                   REM ** Check for answer to page (if a page was done) **
  289.                   IF HasPaged = LineIndex THEN
  290.                      IF ChatActivity$ <> "R" THEN
  291.                         IF ChatActivity$ = "N" THEN
  292.                            CALL QuickTPut("Paged user may not enter chat mode!", 1)
  293.                            HasPaged = 0
  294.                         ELSEIF ChatActivity$ = "Y" THEN
  295.                            HasPaged = 0
  296.                         END IF
  297.                      END IF
  298.                   END IF
  299.  
  300.                   ChatTemp$ = ""
  301.                   NameTemp$ = ""
  302.  
  303.                   REM ** Check for change in node activity              **
  304.                   REM ** In this case, see if someone has left the chat **
  305.                   REM ** node must not be squelched                     **
  306.                   IF NOT SquelchIt THEN
  307.                      IF (ZUserIn$(LineIndex) = "A") AND (ChatActivity$ = "I") THEN
  308.                         GOSUB 59840
  309.                         CALL QuickTPut(NameTemp$ + " on Node " + Index$ + " has exited chat mode!", 1)
  310.                         IF DoTrueChat THEN
  311.                            DoTrueChat = ZFalse
  312.                            CALL LockIt9 (CurrentNodeIndex, ZTrue)
  313.                            LSET InTrueChat$ = "I"
  314.                            LSET ChatInput$ = SPACE$(72)
  315.                            LSET TrueChatIndex$ = MKI$(1)
  316.                            CALL LockIt9 (CurrentNodeIndex, ZFalse)
  317.                            REM ** TrueChat over.. start looping thru all nodes
  318.                            LowerNode = 1
  319.                            UpperNode = Zmaxnodes
  320.                         END IF
  321.                      END IF
  322.                      REM ** OR, If someone has joined the chat **
  323.                      IF (ZUserIn$(LineIndex) <> "A") AND (ChatActivity$ = "A") THEN
  324.                         GOSUB 59840
  325.                         CALL QuickTPut(NameTemp$ + " on Node " + Index$ + " has entered the chat!", 1)
  326.                         REM ** Save the ring buffer index as they currently see it **
  327.                         TrueChatIndexHold(LineIndex) = CVI(TrueChatIndex$)
  328.                      END IF
  329.                   END IF
  330.  
  331.                   REM ** Save new node status (if any) **
  332.                   ZUserIn$(LineIndex) = ChatActivity$
  333.  
  334.                   REM ** If other node is active (& not squelched) check it **
  335.                   IF (ChatActivity$ = "A") AND (NOT SquelchIt) THEN
  336.  
  337.                      OtherNodeInput$ = MID$(ChatInput$, TrueChatIndexHold(LineIndex), 1)
  338.  
  339.                      IF (CVI(TrueChatIndex$) <> TrueChatIndexHold(LineIndex)) THEN
  340.  
  341.                         IF OtherNodeInput$ = CHR$(8) THEN
  342.                            CALL LPrnt(ZLocalBkSp$, 0)
  343.                            CALL PutCom (ZBackSpace$)
  344.                          IF ZCol > 0 THEN
  345.                             ZCol = ZCol - 1
  346.                           END IF
  347.                          ELSEIF OtherNodeInput$ = ZCarriageReturn$ THEN
  348.                            CALL SkipLine(1)
  349.                            ZCol = 1
  350.                          ELSE
  351.                            CALL ColorText(OtherNodeInput$, LineIndex)
  352.                            CALL LPrnt (OtherNodeInput$, 0)
  353.                            CALL PutCom(OtherNodeInput$)
  354.                            ZCol = ZCol + 1
  355.                            IF (ZCol > 65 AND OtherNodeInput$ = CHR$(32)) THEN
  356.                               CALL SkipLine(1)
  357.                              ZCol = 1
  358.                            END IF
  359.                         END IF
  360.                         TrueChatIndexHold(LineIndex) = TrueChatIndexHold(LineIndex) + 1
  361.                         IF TrueChatIndexHold(LineIndex) > 72 THEN TrueChatIndexHold(LineIndex) = 1
  362.  
  363.                      END IF
  364.                   END IF
  365.                END IF
  366.             NEXT
  367.  
  368. REM *************************************************************************
  369. REM *******Get text from local user (local, as in, this node of RBBS)********
  370. REM *******Also local, as in.. SysOp                                 ********
  371. REM *************************************************************************
  372.  
  373. ' ZAutoLogoff! = TIMER + ZWaitBeforeDisconnect 'Pe 01/21/92
  374.             CALL FindFKey                ' will also get local key pressed
  375.             IF ZSubParm < 0 THEN
  376.                EXIT DO
  377.             END IF
  378.  
  379.             Key$ = ""
  380.             IF NOT ZLocalUser THEN
  381.                CALL EOFComm (Char%)
  382.               ELSE
  383.                Char% = -1
  384.             END IF
  385.             IF Char% <> -1 THEN          'if remote key in then get it
  386.                CALL GetCom(Key$)
  387.               ELSE
  388.                Key$ = ZKeyPressed$       'INKEY$ is performed in FindFKey
  389.             END IF
  390.             IF Key$ <> "" THEN
  391.                IF LEN(Key$) = 1 THEN
  392.                   IF Key$ = ZEscape$ OR Key$ = CHR$(17) THEN
  393.                      CALL ChatCommand(ChatSubParm, CurrentNodeIndex, Zmaxnodes)
  394.                      IF ChatSubParm THEN
  395.                         EXIT DO
  396.                      END IF
  397.                    ELSE
  398.                      CALL LockIt9(CurrentNodeIndex, ZTrue)
  399.                      TempChatInput$ = ChatInput$
  400.                      TempTrueChatIndex = CVI(TrueChatIndex$)
  401.                      MID$(TempChatInput$, TempTrueChatIndex, 1) = Key$
  402.                      LSET ChatInput$ = TempChatInput$
  403.                      TempTrueChatIndex = TempTrueChatIndex + 1
  404.                      IF TempTrueChatIndex > 72 THEN
  405.                         TempTrueChatIndex = 1
  406.                      END IF
  407.                      LSET TrueChatIndex$ = MKI$(TempTrueChatIndex)
  408.                      CALL LockIt9(CurrentNodeIndex, ZFalse)
  409.                      IF Key$ <> CHR$(8) THEN
  410.                         IF ZWasGR = 2 AND Key$ <> ZCarriageReturn$ THEN
  411.                            Key$ = ZEmphasizeOff$ + Key$
  412.                         END IF
  413.                         CALL QuickTPut(Key$, 0)
  414.                       ELSE
  415.                         CALL LPrnt(ZLocalBkSp$, 0)
  416.                         IF (NOT ZLocalUser) AND SendRemote THEN
  417.                            CALL PutCom (ZBackSpace$)
  418.                         END IF
  419.                         ZCol = ZCol - 2
  420.                      END IF
  421.                      IF Key$ = ZCarriageReturn$ THEN
  422.                         IF SendRemote AND ZLineFeeds THEN
  423.                            CALL PutCom(ZLineFeed$)
  424.                         END IF
  425.                         ZCol = 0
  426.                      END IF
  427.                      ZCol = ZCol + 1
  428.                   END IF
  429.                   REM ** Reset auto log-off timeski..
  430. '                  ZAutoLogoff! = TIMER + ZWaitBeforeDisconnect
  431.                END IF
  432.             END IF
  433.  
  434.             REM ** I'll call the below.. pseudo-wordwrap.. or a way to
  435.             REM ** get around having to do word wrap.. it ain't easy in
  436.             REM ** char by char mode... Much easier in C than in BASIC
  437.  
  438.             IF (ZCol > 72) OR (ZCol > 65 AND Key$ = CHR$(32)) THEN
  439.                CALL SkipLine(1)
  440.                ZCol = 1
  441.             END IF
  442.  
  443.             CALL CheckCarrier
  444.             IF ZSubParm = -1 THEN
  445.                EXIT DO
  446.             END IF
  447.  
  448. '            CALL CheckTimeRemain(MinsRemaining)
  449. '            IF ZSubParm = -1 THEN
  450. '               EXIT DO
  451. '            END IF
  452. '              CALL CheckTime(ZAutoLogoff!, Remain!, 1)  'Pe 01/21/92
  453. '                IF Remian! < 0 THEN
  454. '                 ZWaitExpired = ZTrue
  455. '               EXIT DO
  456. '             END IF
  457.  
  458.          LOOP
  459.          CALL LockIt9 (CurrentNodeIndex, ZTrue)
  460.          LSET ChatInput$ = SPACE$(72)
  461.          LSET ChatActivity$ = "I"
  462.          LSET InTrueChat$ = "I"
  463.          CALL LockIt9 (CurrentNodeIndex, ZFalse)
  464.          IF HasPaged > 0 THEN
  465.             CALL LockIt9 (HasPaged, ZTrue)
  466.             IF ChatActivity$ = "R" THEN
  467.                LSET ChatActivity$ = "I"
  468.                CALL LockIt9 (HasPaged, ZFalse)
  469.             END IF
  470.          END IF
  471.          CLOSE 9
  472.  
  473.          CLOSE 2
  474.          ZActiveMessageFile$ = WasA1$
  475.  
  476.          ERASE TrueChatIndexHold    'free memory taken by integer array
  477.  
  478.       END IF
  479.  
  480.       EXIT SUB
  481.  
  482. 59840 GET 1, (LineIndex + 1)
  483.       IF MID$(ZMsgRec$, 55, 2) = "-1" AND NOT ZSysop THEN
  484.          NameTemp$ = "SYSOP"
  485.        ELSE
  486.          NameTemp$ = MID$(ZMsgRec$, 1, 26)
  487.       END IF
  488.       CALL TrimTrail (NameTemp$," ")
  489.       CALL NameCaps(NameTemp$)
  490.       RETURN
  491.  
  492.       END SUB
  493. 59900 SUB ColorText(Text$, NodeIndex) STATIC
  494.  
  495.       IF ZWasGR = 2 THEN
  496.          TextColor = (NodeIndex MOD 5) + 2
  497.          Text$ = CHR$(27) + "[1;3" + RIGHT$(STR$(TextColor), 1) + ";40m" + Text$
  498.       END IF
  499.  
  500.       END SUB
  501.  
  502. REM **
  503. REM ** Save what a user is doing in the BBS.. for W)hos on mods..... **
  504. REM **
  505. 59910 SUB SaveUserActivity(Activity$, NodeRecordIndex, ReadIt) STATIC
  506.  
  507.       ChatNodeIndex = NodeRecordIndex - 1
  508.  
  509.       CLOSE 9
  510.       CALL OpenWrk9 (ZChatFileName$)
  511.       CALL Field9
  512.  
  513.       IF ReadIt THEN
  514.          CALL LockIt9(ChatNodeIndex, ZTrue)
  515.          Activity$ = BBSActivity$
  516.        ELSE
  517.          CALL LockIt9(ChatNodeIndex, ZTrue)
  518.          LSET BBSActivity$ = Activity$
  519.          CALL LockIt9(ChatNodeIndex, ZFalse)
  520.       END IF
  521.  
  522.       IF NOT ReadIt THEN
  523.          CLOSE 9
  524.       END IF
  525.  
  526.       END SUB
  527.  
  528. REM **
  529. REM ** Chat command line mode.. this is where they can do certain functions
  530. REM ** pertaining to the chat
  531. REM **
  532. REM ** ChatSubParm is returned TRUE when a user wishes to exit the chat mode
  533.  
  534. 59920 SUB ChatCommand(ChatSubParm, CurrentNodeIndex, Zmaxnodes) STATIC
  535.  
  536.       SHARED DoTrueChat, HasPaged, UpperNode, LowerNode, SaveToDisk
  537.       SHARED NodesToSquelch$
  538.  
  539.       CALL SkipLine(1)
  540. 59921 IF NOT ZExpertUser THEN
  541. 59922 ZFileName$ = "CHAT.MNU"    'Pe 01/27/92
  542.        CALL Graphic (ZFileName$) ' Pe 01/27/92  
  543.        CALL BufFile(ZFileName$, X) 'Pe 01/27/92
  544.       END IF
  545.       ZOutTxt$ = "CHAT command "
  546.  
  547.  IF ZExpertUser THEN
  548.          ZOutTxt$ = ZOutTxt$ + "[C],H,W,Q,X,P"
  549.        ELSE
  550.          ZOutTxt$ = ZOutTxt$ + "[C]hat,H)elp,W)ho,Q)uit,X)pert,P)age"
  551.          END IF
  552.       ZSubParm = 1
  553.       CALL TGet
  554.       IF ZSubParm = -1 THEN
  555.          GOTO 59940
  556.       END IF
  557.       ChatSubParm = ZFalse
  558.       IF ZWasQ > 0 THEN
  559.          CALL AllCaps(ZUserIn$(1))
  560.          SELECT CASE LEFT$(ZUserIn$(1), 1)
  561.  
  562.             CASE "C"    REM ** Return to chat mode
  563.                EXIT SUB
  564.  
  565.             CASE "H", "?" REM ** Help.. means show the Chat menu
  566.                GOTO 59922
  567.  
  568.             CASE "W"    REM ** Show whos on the system
  569.                CALL PageEm(CurrentNodeIndex, Zmaxnodes, ZTrue)
  570.                GOTO 59921
  571.  
  572.             CASE "Q"    REM ** Quit/Exit out of chat mode
  573.                ChatSubParm = ZTrue
  574.                EXIT SUB
  575.  
  576.             CASE "X"    REM ** Toggle expert mode
  577.                CALL Toggle(9)
  578.                GOTO 59921
  579.  
  580.             CASE "P"    REM ** Page another node to chat
  581.                IF NOT DoTrueChat THEN
  582.                   CALL PageEm(CurrentNodeIndex, Zmaxnodes, ZFalse)
  583.                   IF HasPaged = -1 THEN
  584.                      ChatSubParm = ZTrue
  585.                      EXIT SUB
  586.                   END IF
  587.                END IF
  588.                GOTO 59921
  589.  
  590.             CASE ELSE   REM ** Illegal command entered.. show menu..
  591.                CALL QuickTPut1("Unknown command <" + LEFT$(ZUserIn$(1), 1) + ">")
  592.                GOTO 59922
  593.  
  594.          END SELECT
  595.       END IF
  596.       EXIT SUB
  597.  
  598.       REM ** user dropped carrier.. return in a way to abort chat mode
  599. 59940 ChatSubParm = ZTrue
  600.       END SUB
  601.  
  602. 59990 SUB Field9 STATIC
  603.       REM ** all of these variables are SHARED between all subprograms in **
  604.       REM ** this module (RCHAT300.BAS)                                   **
  605.       FIELD 9, 1 AS ChatActivity$, _
  606.                2 AS PagingNode$,   _
  607.                2 AS PrivateFor$,   _
  608.               72 AS ChatInput$,    _
  609.               31 AS ChatName$,     _
  610.                1 AS InTrueChat$,   _
  611.                2 AS TrueChatIndex$,_
  612.                1 AS SavingToDisk$, _
  613.                1 AS BBSActivity$
  614.       END SUB
  615.